/**
 * 日期格式化工具函数
 */

/**
 * 格式化日期为指定格式的字符串
 * @param {Date} date - 需要格式化的日期对象
 * @param {string} format - 格式字符串，例如 'YYYY-MM-DD HH:mm:ss'
 * @returns {string} 格式化后的日期字符串
 */
export function formatDate(date, format = 'YYYY-MM-DD') {
  if (!date) return '';
  
  // 确保date是Date对象
  if (!(date instanceof Date)) {
    date = new Date(date);
  }
  
  const year = date.getFullYear();
  const month = (date.getMonth() + 1).toString().padStart(2, '0');
  const day = date.getDate().toString().padStart(2, '0');
  const hours = date.getHours().toString().padStart(2, '0');
  const minutes = date.getMinutes().toString().padStart(2, '0');
  const seconds = date.getSeconds().toString().padStart(2, '0');
  
  return format
    .replace('YYYY', year)
    .replace('MM', month)
    .replace('DD', day)
    .replace('HH', hours)
    .replace('mm', minutes)
    .replace('ss', seconds);
}

/**
 * 解析日期字符串为Date对象
 * @param {string} dateStr - 日期字符串
 * @returns {Date} Date对象
 */
export function parseDate(dateStr) {
  if (!dateStr) return null;
  return new Date(dateStr);
}

/**
 * 获取两个日期之间的天数差
 * @param {Date} date1 - 第一个日期
 * @param {Date} date2 - 第二个日期
 * @returns {number} 天数差
 */
export function getDaysBetween(date1, date2) {
  const oneDay = 24 * 60 * 60 * 1000; // 一天的毫秒数
  // 取整数天数
  return Math.round(Math.abs((date1 - date2) / oneDay));
}

/**
 * 获取当前月份的第一天
 * @param {Date} date - 日期对象
 * @returns {Date} 当月第一天的Date对象
 */
export function getFirstDayOfMonth(date) {
  return new Date(date.getFullYear(), date.getMonth(), 1);
}

/**
 * 获取当前月份的最后一天
 * @param {Date} date - 日期对象
 * @returns {Date} 当月最后一天的Date对象
 */
export function getLastDayOfMonth(date) {
  return new Date(date.getFullYear(), date.getMonth() + 1, 0);
}

/**
 * 给日期添加指定天数
 * @param {Date} date - 日期对象
 * @param {number} days - 天数，可以为负数
 * @returns {Date} 新的Date对象
 */
export function addDays(date, days) {
  const result = new Date(date);
  result.setDate(result.getDate() + days);
  return result;
} 